package com.oa.hyperion.repository.assets;

import com.oa.hyperion.entity.assets.AssetsAllocation;
import com.oa.hyperion.entity.assets.AssetsDetail;
import com.oa.hyperion.utils.DBUtils;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.jdbc.SQL;

import java.util.List;

/**
 * 资产使用明细
 * author yuanchongwei
 * date 2022-1-18
 */
public interface AssetsDetailMapper {
    /**
     * 新增
     * @param assetsDetail 使用明细
     */
    @Insert("insert into " +
            "assets_detail(asset_id,apply_dpt,applyer,apply_date,returned,return_date,handler) " +
            "values(#{assetId},#{applyDpt},#{applyer},#{applyDate},#{returned},#{returnDate},#{handler})")
    @Options(useGeneratedKeys = true,keyColumn = "id",keyProperty = "id")
    void insert(AssetsDetail assetsDetail);

    /**
     * 更新
     * 资产归还时修改归还信息：归还状态，归还时间
     * author yuanchongwei
     * date 2022-1-18
     * @param assetsDetail 使用明细
     */
    @UpdateProvider(type = AssetsDetailMapper.SqlProvider.class,method = "update")
    boolean update(AssetsDetail assetsDetail);

    /**
     * 查询所有使用明细
     * @return
     */
    @Select("select * from assets_detail")
    List<AssetsDetail> getAllDetails();

    /**
     * 查询
     * 根据资产id查询资产使用明细信息
     * @param asset_id 资产id
     * @return 资产使用明细
     */
    @Select("select * from assets_detail where asset_id=#{assetId}")
    public List<AssetsDetail> getAssetsDetailByAssetId(int asset_id);

    /**
     * 查询
     * 根据申请部门查询资产使用明细信息
     * @param apply_dpt 申请部门
     * @return 资产使用明细
     */
    @Select("select * from assets_detail where apply_dpt=#{applyDpt}")
    public List<AssetsDetail> getAssetsDetailByApplydpt(int apply_dpt);

    /**
     * 查询
     * 根据经办人查询资产使用明细信息
     * @param handler 经办人
     * @return 资产使用明细
     */
    @Select("select * from assets_detail where handler=#{handler}")
    public List<AssetsDetail> getAssetsDetailByHandler(String handler);

    /**
     * 查询
     * 根据归还状态查询资产使用明细信息
     * @param returned 归还状态
     * @return 资产使用明细
     */
    @Select("select * from assets_detail where returned=#{returned}")
    public List<AssetsDetail> getAssetsDetailByReturned(String returned);


    /**
     * 动态sql
     */
    public static class SqlProvider{
        public static String update(AssetsDetail assetsDetail){
            SQL sql = new SQL();
            sql.UPDATE("assets_detail");
            if(DBUtils.isNotEmpty(assetsDetail.getReturned())){
                //修改库存
                sql.SET("returned=#{returned}");
            }
            if (DBUtils.isNotEmpty(assetsDetail.getReturnDate())) {
                sql.SET("return_date=#{returnDate}");
            }
            sql.WHERE("id=#{id}");
            return sql.toString();
        }
    }


}
